{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {
    "colab_type": "text",
    "id": "MV-CWK2kI-iH"
   },
   "source": [
    "## TFMA Notebook example\n",
    "\n",
    "This notebook describes how to export your model for TFMA and demonstrates the analysis tooling it offers.\n",
    "\n",
    "Note: Please make sure to follow the instructions in [README.md](https://github.com/tensorflow/tfx/blob/master/tfx/examples/chicago_taxi/README.md) when running this notebook"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "colab_type": "text",
    "id": "MV-CWK2kI-iH"
   },
   "source": [
    "## Setup\n",
    "\n",
    "Import necessary packages."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "WARNING: Logging before flag parsing goes to stderr.\n",
      "W0820 17:16:27.998271 139825583544128 deprecation_wrapper.py:119] From /srv/hops/anaconda/anaconda/envs/python27/lib/python2.7/site-packages/tensorflow_transform/beam/common.py:51: The name tf.ConfigProto is deprecated. Please use tf.compat.v1.ConfigProto instead.\n",
      "\n",
      "W0820 17:16:28.007344 139825583544128 deprecation_wrapper.py:119] From /srv/hops/anaconda/anaconda/envs/python27/lib/python2.7/site-packages/tensorflow_transform/beam/impl.py:283: The name tf.SparseTensorValue is deprecated. Please use tf.compat.v1.SparseTensorValue instead.\n",
      "\n"
     ]
    }
   ],
   "source": [
    "from  hops import hdfs\n",
    "import tensorflow_data_validation as tfdv\n",
    "import tensorflow_model_analysis as tfma\n",
    "import tensorflow_metadata as tfm\n",
    "from tensorflow.python.lib.io import file_io\n",
    "import os"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "colab_type": "text",
    "id": "zpCt_emiJDeb"
   },
   "source": [
    "Helper functions and some constants for running the notebook locally."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [],
   "source": [
    "BASE_DIR = hdfs.project_path(exclude_nn_addr=True)\n",
    "DATA_DIR = os.path.join(BASE_DIR, 'Resources/data')\n",
    "OUTPUT_DIR = os.path.join(BASE_DIR, 'Resources/taxi_out')\n",
    "TMP_DIR = os.path.join(BASE_DIR, 'Resources/taxi_tmp')\n",
    "\n",
    "# Base dir containing train and eval data\n",
    "TRAIN_DATA_DIR = os.path.join(DATA_DIR, 'train')\n",
    "EVAL_DATA_DIR = os.path.join(DATA_DIR, 'eval')\n",
    "\n",
    "# Base dir where TFT writes training data\n",
    "TFT_TRAIN_OUTPUT_BASE_DIR = os.path.join(OUTPUT_DIR, 'tft_train')\n",
    "TFT_TRAIN_FILE_PREFIX = 'train_transformed'\n",
    "\n",
    "# Base dir where TFT writes eval data\n",
    "TFT_EVAL_OUTPUT_BASE_DIR = os.path.join(OUTPUT_DIR, 'tft_eval')\n",
    "TFT_EVAL_FILE_PREFIX = 'eval_transformed'\n",
    "\n",
    "TF_OUTPUT_BASE_DIR = os.path.join(OUTPUT_DIR, 'tf')\n",
    "\n",
    "# Base dir where TFMA writes eval data\n",
    "TFMA_OUTPUT_BASE_DIR = os.path.join(OUTPUT_DIR, 'tfma')\n",
    "\n",
    "SERVING_MODEL_DIR = 'serving_model_dir'\n",
    "EVAL_MODEL_DIR = 'eval_model_dir'\n",
    "\n",
    "\n",
    "def get_tft_train_output_dir(run_id):\n",
    "    return _get_output_dir(TFT_TRAIN_OUTPUT_BASE_DIR, run_id)\n",
    "\n",
    "\n",
    "def get_tft_eval_output_dir(run_id):\n",
    "    return _get_output_dir(TFT_EVAL_OUTPUT_BASE_DIR, run_id)\n",
    "\n",
    "\n",
    "def get_tf_output_dir(run_id):\n",
    "    return _get_output_dir(TF_OUTPUT_BASE_DIR, run_id)\n",
    "\n",
    "def get_tfma_output_dir(run_id):\n",
    "    return _get_output_dir(TFMA_OUTPUT_BASE_DIR, run_id)\n",
    "\n",
    "def _get_output_dir(base_dir, run_id):\n",
    "    return os.path.join(base_dir, 'run_' + str(run_id))\n",
    "\n",
    "def get_schema_file():\n",
    "    return os.path.join(OUTPUT_DIR, 'schema.pbtxt')\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "colab_type": "text",
    "id": "ZXK_1T-JJL9s"
   },
   "source": [
    "## Compute and visualize descriptive data statistics"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {
    "colab": {},
    "colab_type": "code",
    "id": "baGGqXSaJQeT"
   },
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "W0820 16:24:26.321234 139929481271104 deprecation.py:323] From /srv/hops/anaconda/anaconda/envs/python27/lib/python2.7/site-packages/tensorflow_data_validation/utils/stats_gen_lib.py:328: tf_record_iterator (from tensorflow.python.lib.io.tf_record) is deprecated and will be removed in a future version.\n",
      "Instructions for updating:\n",
      "Use eager execution and: \n",
      "`tf.data.TFRecordDataset(path)`\n"
     ]
    },
    {
     "data": {
      "text/html": [
       "<iframe id='facets-iframe' width=\"100%\" height=\"500px\"></iframe>\n",
       "        <script>\n",
       "        facets_iframe = document.getElementById('facets-iframe');\n",
       "        facets_html = '<link rel=\"import\" href=\"https://raw.githubusercontent.com/PAIR-code/facets/master/facets-dist/facets-jupyter.html\"><facets-overview proto-input=\"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\"></facets-overview>';\n",
       "        facets_iframe.contentWindow.document.write(facets_html);\n",
       "         facets_iframe.id = \"\";\n",
       "         setTimeout(() => {\n",
       "           facets_iframe.setAttribute('height', facets_iframe.contentWindow.document.body.offsetHeight + 'px')\n",
       "         }, 1500)\n",
       "         </script>"
      ],
      "text/plain": [
       "<IPython.core.display.HTML object>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# Visualize training data stats.\n",
    "train_stats = tfdv.load_statistics(os.path.join(TMP_DIR,'train_stats'))\n",
    "tfdv.visualize_statistics(train_stats)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "colab_type": "text",
    "id": "AsOJi9U3JR35"
   },
   "source": [
    "## Infer a schema"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Started copying hdfs:///Projects/flink_tutorial/Resources/taxi_tmp/schema to local disk on path /srv/hops/staging/private_dirs/86e80ce5c9a20c6503c7203feae14c93f9e1f19e6c75063a4fcacd43641cdaf3/\n",
      "\n",
      "Finished copying\n",
      "\n"
     ]
    }
   ],
   "source": [
    "hdfs.copy_to_local(os.path.join(TMP_DIR, 'schema'), '')\n",
    "with open('schema','r') as f:\n",
    "    schema = f.read()\n",
    "    schema = tfm.proto.v0.schema_pb2.Schema().FromString(schema)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {
    "colab": {},
    "colab_type": "code",
    "id": "JSUFwSKoJTtT"
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Type</th>\n",
       "      <th>Presence</th>\n",
       "      <th>Valency</th>\n",
       "      <th>Domain</th>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Feature name</th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>'fare'</th>\n",
       "      <td>FLOAT</td>\n",
       "      <td>required</td>\n",
       "      <td>single</td>\n",
       "      <td>-</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>'trip_start_hour'</th>\n",
       "      <td>INT</td>\n",
       "      <td>required</td>\n",
       "      <td>single</td>\n",
       "      <td>-</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>'pickup_census_tract'</th>\n",
       "      <td>BYTES</td>\n",
       "      <td>optional</td>\n",
       "      <td></td>\n",
       "      <td>-</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>'dropoff_census_tract'</th>\n",
       "      <td>FLOAT</td>\n",
       "      <td>optional</td>\n",
       "      <td>single</td>\n",
       "      <td>-</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>'company'</th>\n",
       "      <td>STRING</td>\n",
       "      <td>optional</td>\n",
       "      <td>single</td>\n",
       "      <td>'company'</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>'trip_start_timestamp'</th>\n",
       "      <td>INT</td>\n",
       "      <td>required</td>\n",
       "      <td>single</td>\n",
       "      <td>-</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>'pickup_longitude'</th>\n",
       "      <td>FLOAT</td>\n",
       "      <td>required</td>\n",
       "      <td>single</td>\n",
       "      <td>-</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>'trip_start_month'</th>\n",
       "      <td>INT</td>\n",
       "      <td>required</td>\n",
       "      <td>single</td>\n",
       "      <td>-</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>'trip_miles'</th>\n",
       "      <td>FLOAT</td>\n",
       "      <td>required</td>\n",
       "      <td>single</td>\n",
       "      <td>-</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>'dropoff_longitude'</th>\n",
       "      <td>FLOAT</td>\n",
       "      <td>optional</td>\n",
       "      <td>single</td>\n",
       "      <td>-</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>'dropoff_community_area'</th>\n",
       "      <td>FLOAT</td>\n",
       "      <td>optional</td>\n",
       "      <td>single</td>\n",
       "      <td>-</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>'pickup_community_area'</th>\n",
       "      <td>INT</td>\n",
       "      <td>required</td>\n",
       "      <td>single</td>\n",
       "      <td>-</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>'payment_type'</th>\n",
       "      <td>STRING</td>\n",
       "      <td>required</td>\n",
       "      <td>single</td>\n",
       "      <td>'payment_type'</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>'trip_seconds'</th>\n",
       "      <td>FLOAT</td>\n",
       "      <td>optional</td>\n",
       "      <td>single</td>\n",
       "      <td>-</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>'trip_start_day'</th>\n",
       "      <td>INT</td>\n",
       "      <td>required</td>\n",
       "      <td>single</td>\n",
       "      <td>-</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>'tips'</th>\n",
       "      <td>FLOAT</td>\n",
       "      <td>required</td>\n",
       "      <td>single</td>\n",
       "      <td>-</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>'pickup_latitude'</th>\n",
       "      <td>FLOAT</td>\n",
       "      <td>required</td>\n",
       "      <td>single</td>\n",
       "      <td>-</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>'dropoff_latitude'</th>\n",
       "      <td>FLOAT</td>\n",
       "      <td>optional</td>\n",
       "      <td>single</td>\n",
       "      <td>-</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "                            Type  Presence Valency          Domain\n",
       "Feature name                                                      \n",
       "'fare'                     FLOAT  required  single               -\n",
       "'trip_start_hour'            INT  required  single               -\n",
       "'pickup_census_tract'      BYTES  optional                       -\n",
       "'dropoff_census_tract'     FLOAT  optional  single               -\n",
       "'company'                 STRING  optional  single       'company'\n",
       "'trip_start_timestamp'       INT  required  single               -\n",
       "'pickup_longitude'         FLOAT  required  single               -\n",
       "'trip_start_month'           INT  required  single               -\n",
       "'trip_miles'               FLOAT  required  single               -\n",
       "'dropoff_longitude'        FLOAT  optional  single               -\n",
       "'dropoff_community_area'   FLOAT  optional  single               -\n",
       "'pickup_community_area'      INT  required  single               -\n",
       "'payment_type'            STRING  required  single  'payment_type'\n",
       "'trip_seconds'             FLOAT  optional  single               -\n",
       "'trip_start_day'             INT  required  single               -\n",
       "'tips'                     FLOAT  required  single               -\n",
       "'pickup_latitude'          FLOAT  required  single               -\n",
       "'dropoff_latitude'         FLOAT  optional  single               -"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Values</th>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Domain</th>\n",
       "      <th></th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>'company'</th>\n",
       "      <td>'0118 - 42111 Godfrey S.Awir', '0694 - 59280 Chinesco Trans Inc', '1085 - 72312 N and W Cab Co', '2733 - 74600 Benny Jona', '2809 - 95474 C &amp; D Cab Co Inc.', '3011 - 66308 JBL Cab Inc.', '3152 - 97284 Crystal Abernathy', '3201 - C&amp;D Cab Co Inc', '3201 - CID Cab Co Inc', '3253 - 91138 Gaither Cab Co.', '3385 - 23210 Eman Cab', '3623 - 72222 Arrington Enterprises', '3897 - Ilie Malec', '4053 - Adwar H. Nikola', '4197 - 41842 Royal Star', '4615 - 83503 Tyrone Henderson', '4615 - Tyrone Henderson', '4623 - Jay Kim', '5006 - 39261 Salifu Bawa', '5006 - Salifu Bawa', '5074 - 54002 Ahzmi Inc', '5074 - Ahzmi Inc', '5129 - 87128', '5129 - 98755 Mengisti Taxi', '5129 - Mengisti Taxi', '5724 - KYVI Cab Inc', '585 - Valley Cab Co', '5864 - 73614 Thomas Owusu', '5864 - Thomas Owusu', '5874 - 73628 Sergey Cab Corp.', '5997 - 65283 AW Services Inc.', '5997 - AW Services Inc.', '6488 - 83287 Zuha Taxi', '6743 - Luhak Corp', 'Blue Ribbon Taxi Association Inc.', 'C &amp; D Cab Co Inc', 'Chicago Elite Cab Corp.', 'Chicago Elite Cab Corp. (Chicago Carriag', 'Chicago Medallion Leasing INC', 'Chicago Medallion Management', 'Choice Taxi Association', 'Dispatch Taxi Affiliation', 'KOAM Taxi Association', 'Northwest Management LLC', 'Taxi Affiliation Services', 'Top Cab Affiliation'</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>'payment_type'</th>\n",
       "      <td>'Cash', 'Credit Card', 'Dispute', 'No Charge', 'Pcard', 'Unknown'</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    Values\n",
       "Domain                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    \n",
       "'company'       '0118 - 42111 Godfrey S.Awir', '0694 - 59280 Chinesco Trans Inc', '1085 - 72312 N and W Cab Co', '2733 - 74600 Benny Jona', '2809 - 95474 C & D Cab Co Inc.', '3011 - 66308 JBL Cab Inc.', '3152 - 97284 Crystal Abernathy', '3201 - C&D Cab Co Inc', '3201 - CID Cab Co Inc', '3253 - 91138 Gaither Cab Co.', '3385 - 23210 Eman Cab', '3623 - 72222 Arrington Enterprises', '3897 - Ilie Malec', '4053 - Adwar H. Nikola', '4197 - 41842 Royal Star', '4615 - 83503 Tyrone Henderson', '4615 - Tyrone Henderson', '4623 - Jay Kim', '5006 - 39261 Salifu Bawa', '5006 - Salifu Bawa', '5074 - 54002 Ahzmi Inc', '5074 - Ahzmi Inc', '5129 - 87128', '5129 - 98755 Mengisti Taxi', '5129 - Mengisti Taxi', '5724 - KYVI Cab Inc', '585 - Valley Cab Co', '5864 - 73614 Thomas Owusu', '5864 - Thomas Owusu', '5874 - 73628 Sergey Cab Corp.', '5997 - 65283 AW Services Inc.', '5997 - AW Services Inc.', '6488 - 83287 Zuha Taxi', '6743 - Luhak Corp', 'Blue Ribbon Taxi Association Inc.', 'C & D Cab Co Inc', 'Chicago Elite Cab Corp.', 'Chicago Elite Cab Corp. (Chicago Carriag', 'Chicago Medallion Leasing INC', 'Chicago Medallion Management', 'Choice Taxi Association', 'Dispatch Taxi Affiliation', 'KOAM Taxi Association', 'Northwest Management LLC', 'Taxi Affiliation Services', 'Top Cab Affiliation'\n",
       "'payment_type'  'Cash', 'Credit Card', 'Dispute', 'No Charge', 'Pcard', 'Unknown'                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         "
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "tfdv.display_schema(schema=schema)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "colab_type": "text",
    "id": "kzLwrYqEJWcD"
   },
   "source": [
    "## Check evaluation data for errors"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {
    "colab": {},
    "colab_type": "code",
    "id": "NvxUKVMJJcSk"
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<iframe id='facets-iframe' width=\"100%\" height=\"500px\"></iframe>\n",
       "        <script>\n",
       "        facets_iframe = document.getElementById('facets-iframe');\n",
       "        facets_html = '<link rel=\"import\" href=\"https://raw.githubusercontent.com/PAIR-code/facets/master/facets-dist/facets-jupyter.html\"><facets-overview proto-input=\"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\"></facets-overview>';\n",
       "        facets_iframe.contentWindow.document.write(facets_html);\n",
       "         facets_iframe.id = \"\";\n",
       "         setTimeout(() => {\n",
       "           facets_iframe.setAttribute('height', facets_iframe.contentWindow.document.body.offsetHeight + 'px')\n",
       "         }, 1500)\n",
       "         </script>"
      ],
      "text/plain": [
       "<IPython.core.display.HTML object>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# Compare stats of eval data with training data.\n",
    "eval_stats = tfdv.load_statistics(os.path.join(TMP_DIR,'eval_stats'))\n",
    "tfdv.visualize_statistics(lhs_statistics=eval_stats, rhs_statistics=train_stats,\n",
    "                          lhs_name='EVAL_DATASET', rhs_name='TRAIN_DATASET')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Started copying hdfs:///Projects/flink_tutorial/Resources/taxi_tmp/anomalies to local disk on path /srv/hops/staging/private_dirs/86e80ce5c9a20c6503c7203feae14c93f9e1f19e6c75063a4fcacd43641cdaf3/\n",
      "\n",
      "Finished copying\n",
      "\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "/srv/hops/anaconda/envs/python27/lib/python2.7/site-packages/ipykernel_launcher.py:4: RuntimeWarning: Unexpected end-group tag: Not all data was converted\n",
      "  after removing the cwd from sys.path.\n"
     ]
    }
   ],
   "source": [
    "hdfs.copy_to_local(os.path.join(TMP_DIR,'anomalies'), '')\n",
    "with open('anomalies','r') as f:\n",
    "    anomalies = f.read()\n",
    "    anomalies = tfm.proto.v0.anomalies_pb2.Anomalies().FromString(anomalies)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {
    "colab": {},
    "colab_type": "code",
    "id": "5QqFQ29tJhEi"
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<h4 style=\"color:green;\">No anomalies found.</h4>"
      ],
      "text/plain": [
       "<IPython.core.display.HTML object>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "tfdv.display_anomalies(anomalies)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {
    "colab": {},
    "colab_type": "code",
    "id": "MZ_xsJgUJiGL"
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<h4 style=\"color:green;\">No anomalies found.</h4>"
      ],
      "text/plain": [
       "<IPython.core.display.HTML object>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# Update the schema based on the observed anomalies.\n",
    "\n",
    "# Relax the minimum fraction of values that must come from the domain for feature company.\n",
    "company = tfdv.get_feature(schema, 'company')\n",
    "company.distribution_constraints.min_domain_mass = 0.9\n",
    "\n",
    "# Add new value to the domain of feature payment_type.\n",
    "payment_type_domain = tfdv.get_domain(schema, 'payment_type')\n",
    "payment_type_domain.value.append('Prcard')\n",
    "\n",
    "# Validate eval stats after updating the schema \n",
    "updated_anomalies = tfdv.validate_statistics(eval_stats, schema)\n",
    "tfdv.display_anomalies(updated_anomalies)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Visualization: Slicing Metrics\n",
    "\n",
    "To see the slices, either use the name of the column (by setting slicing_column) or provide a tfma.slicer.SingleSliceSpec (by setting slicing_spec). If neither is provided, the overall will be displayed.\n",
    "\n",
    "The default visualization is **slice overview** when the number of slices is small. It shows the value of a metric for each slice sorted by the another metric. It is also possible to set a threshold to filter out slices with smaller weights.\n",
    "\n",
    "This view also supports **metrics histogram** as an alternative visualization. It is also the defautl view when the number of slices is large. The results will be divided into buckets and the number of slices / total weights / both can be visualized. Slices with small weights can be fitlered out by setting the threshold. Further filtering can be applied by dragging the grey band. To reset the range, double click the band. Filtering can be used to remove outliers in the visualization and the metrics table below."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [],
   "source": [
    "# An empty slice spec means the overall slice, that is, the whole dataset.\n",
    "OVERALL_SLICE_SPEC = tfma.slicer.SingleSliceSpec()\n",
    "\n",
    "# Data can be sliced along a feature column\n",
    "# In this case, data is sliced along feature column trip_start_hour.\n",
    "FEATURE_COLUMN_SLICE_SPEC = tfma.slicer.SingleSliceSpec(columns=['trip_start_hour'])\n",
    "\n",
    "# Data can be sliced by crossing feature columns\n",
    "# In this case, slices are computed for trip_start_day x trip_start_month.\n",
    "FEATURE_COLUMN_CROSS_SPEC = tfma.slicer.SingleSliceSpec(columns=['trip_start_day', 'trip_start_month'])\n",
    "\n",
    "# Metrics can be computed for a particular feature value.\n",
    "# In this case, metrics is computed for all data where trip_start_hour is 12.\n",
    "FEATURE_VALUE_SPEC = tfma.slicer.SingleSliceSpec(features=[('trip_start_hour', 12)])\n",
    "\n",
    "# It is also possible to mix column cross and feature value cross.\n",
    "# In this case, data where trip_start_hour is 12 will be sliced by trip_start_day.\n",
    "COLUMN_CROSS_VALUE_SPEC = tfma.slicer.SingleSliceSpec(columns=['trip_start_day'], features=[('trip_start_hour', 12)])\n",
    "\n",
    "ALL_SPECS = [\n",
    "    OVERALL_SLICE_SPEC,\n",
    "    FEATURE_COLUMN_SLICE_SPEC, \n",
    "    FEATURE_COLUMN_CROSS_SPEC, \n",
    "    FEATURE_VALUE_SPEC, \n",
    "    COLUMN_CROSS_VALUE_SPEC    \n",
    "]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "W0820 17:16:32.554158 139825583544128 deprecation.py:323] From /srv/hops/anaconda/anaconda/envs/python27/lib/python2.7/site-packages/tensorflow_model_analysis/evaluators/metrics_and_plots_evaluator.py:83: tf_record_iterator (from tensorflow.python.lib.io.tf_record) is deprecated and will be removed in a future version.\n",
      "Instructions for updating:\n",
      "Use eager execution and: \n",
      "`tf.data.TFRecordDataset(path)`\n"
     ]
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "567c57b7396c4905a3128ae901e099ad",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "U2xpY2luZ01ldHJpY3NWaWV3ZXIoY29uZmlnPXsnd2VpZ2h0ZWRFeGFtcGxlc0NvbHVtbic6ICdwb3N0X2V4cG9ydF9tZXRyaWNzL2V4YW1wbGVfY291bnQnfSwgZGF0YT1beydtZXRyaWNzJzrigKY=\n"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "tfma_result_1 = tfma.load_eval_result(output_path=get_tfma_output_dir(0))\n",
    "# Show data sliced along feature column trip_start_hour.\n",
    "tfma.view.render_slicing_metrics(\n",
    "    tfma_result_1, slicing_column='trip_start_hour')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "2737fe624c5a4b6391fdd5b81db1fc8a",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "U2xpY2luZ01ldHJpY3NWaWV3ZXIoY29uZmlnPXsnd2VpZ2h0ZWRFeGFtcGxlc0NvbHVtbic6ICdwb3N0X2V4cG9ydF9tZXRyaWNzL2V4YW1wbGVfY291bnQnfSwgZGF0YT1beydtZXRyaWNzJzrigKY=\n"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# Show metrics sliced by COLUMN_CROSS_VALUE_SPEC above.\n",
    "tfma.view.render_slicing_metrics(tfma_result_1, slicing_spec=COLUMN_CROSS_VALUE_SPEC)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "c27a4586310e4bb682a76622b18e3ab2",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "U2xpY2luZ01ldHJpY3NWaWV3ZXIoY29uZmlnPXsnd2VpZ2h0ZWRFeGFtcGxlc0NvbHVtbic6ICdwb3N0X2V4cG9ydF9tZXRyaWNzL2V4YW1wbGVfY291bnQnfSwgZGF0YT1beydtZXRyaWNzJzrigKY=\n"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# Show overall metrics.\n",
    "tfma.view.render_slicing_metrics(tfma_result_1)"
   ]
  }
 ],
 "metadata": {
  "colab": {
   "collapsed_sections": [],
   "name": "chicago_taxi_tfma_local_playground.ipynb",
   "provenance": [],
   "version": "0.3.2"
  },
  "kernelspec": {
   "display_name": "python-flink_tutorial__meb10000",
   "language": "python",
   "name": "python2"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 2
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython2",
   "version": "2.7.16"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 1
}